// pages/market/index.js
const util = require('../../utils/util.js'); // 注意路径是否正确

Page({
  data: {
    stockDate: "", // 初始化空日期
    isLogin: false, // 是否已登录
    userPhone: '', // 用户手机号
    showUserOptions: false, // 是否显示用户操作弹窗
    // 今日板块数据（热门行业）
    sectors: [
      { name: "有色金属", change: "+2.15%" },
      { name: "煤炭", change: "+1.85%" },
      { name: "钢铁", change: "+1.65%" },
      { name: "石油石化", change: "+1.45%" },
      { name: "电力", change: "+1.25%" },
      { name: "建筑材料", change: "+1.05%" },
      { name: "建筑装饰", change: "+0.85%" },
      { name: "机械设备", change: "+0.65%" }
    ],
    // 股票排行榜数据
    stockRankings: {
      rise: [],
      fall: [],
      volume: [],
      speed: []
    },
    // 股票排行榜完整数据（用于查看更多）
    fullStockRankings: {
      rise: [],
      fall: [],
      volume: [],
      speed: []
    },
    // 排行榜显示状态（是否展开显示更多）
    rankingExpanded: {
      rise: false,
      fall: false,
      volume: false,
      speed: false
    },
    // 当前选中的排行榜类型
    currentRankType: 'rise',

    // 股票搜索相关
    searchKeyword: '',
    searchResults: [],
    showSearchResults: false,
    searchTimer: null
  },

  onLoad: function () {
    // 获取应用实例
    const app = getApp();

    // 检查登录状态
    if (app.globalData.isLogin) {
      this.setData({
        isLogin: true,
        userPhone: app.globalData.userPhone
      });
    } else {
      // 如果全局数据还没有准备好，设置回调
      app.loginStatusCallback = isLogin => {
        this.setData({
          isLogin: isLogin,
          userPhone: app.globalData.userPhone
        });
      };
    }
  },

  onShow() {
    const currentDate = new Date();
    this.setData({
      stockDate: util.formatStockDate(currentDate)
    });

    // 加载股票排行榜数据
    this.loadStockRankings();

    // 加载板块数据
    this.loadSectorData();

    // 每次显示页面时检查登录状态
    const app = getApp();
    this.setData({
      isLogin: app.globalData.isLogin,
      userPhone: app.globalData.userPhone
    });
  },

  // 加载股票排行榜数据
  loadStockRankings: function () {
    // 加载涨幅榜
    this.loadRankingData('rise', 'f3', 1); // 按涨跌幅排序，降序

    // 加载跌幅榜
    this.loadRankingData('fall', 'f3', 0); // 按涨跌幅排序，升序

    // 加载成交额榜
    this.loadRankingData('volume', 'f6', 1); // 按成交额排序，降序

    // 加载涨速榜（使用涨跌幅数据）
    this.loadRankingData('speed', 'f3', 1); // 按涨跌幅排序，降序
  },

  // 加载特定排行榜的股票数据
  loadRankingData: function (rankType, sortField, sortOrder) {
    const that = this;

    wx.request({
      url: 'https://push2.eastmoney.com/api/qt/clist/get',
      data: {
        pn: 1,
        pz: 50, // 获取50条数据
        po: sortOrder,
        np: 1,
        ut: 'bd1d9ddb04089700cf9c27f6f7426281',
        fltt: 2,
        invt: 2,
        fid: sortField,
        fs: 'm:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23', // A股主板+创业板+科创板
        fields: 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152'
      },
      header: {
        'content-type': 'application/json',
        'Referer': 'https://data.eastmoney.com'
      },
      success(res) {
        that.parseRankingData(res.data, rankType);
      },
      fail(err) {
        console.error(`获取${rankType}排行榜数据失败`, err);
      }
    });
  },

  // 解析排行榜数据
  parseRankingData: function (data, rankType) {
    try {
      if (data && data.data && data.data.diff && Array.isArray(data.data.diff)) {
        const stocks = data.data.diff.map(item => {
          const change = item.f3;
          const changeStr = change > 0 ? `+${change.toFixed(2)}%` : `${change.toFixed(2)}%`;
          const price = item.f2 ? item.f2.toFixed(2) : '--';

          // 处理成交额
          let volume = '--';
          if (item.f6) {
            if (item.f6 >= 100000000) {
              volume = (item.f6 / 100000000).toFixed(2) + '亿';
            } else if (item.f6 >= 10000) {
              volume = (item.f6 / 10000).toFixed(2) + '万';
            } else {
              volume = item.f6.toFixed(0);
            }
          }

          // 为股票代码添加正确的前缀
          let stockCode = item.f12 || '--';
          if (stockCode !== '--') {
            // 根据市场类型添加前缀
            const marketType = item.f13; // 市场类型：0-深圳，1-上海
            if (marketType === 1) {
              stockCode = 'sh' + stockCode;
            } else if (marketType === 0) {
              stockCode = 'sz' + stockCode;
            }
          }

          return {
            name: item.f14 || '--',
            code: stockCode,
            price: price,
            change: changeStr,
            volume: volume
          };
        });

        // 存储完整数据
        const fullUpdateData = {};
        fullUpdateData[`fullStockRankings.${rankType}`] = stocks;

        // 显示前10条数据
        const displayUpdateData = {};
        displayUpdateData[`stockRankings.${rankType}`] = stocks.slice(0, 10);

        this.setData({
          ...fullUpdateData,
          ...displayUpdateData
        });
      }
    } catch (error) {
      console.error('解析排行榜数据失败', error);
    }
  },

  // 跳转到登录页面
  goToLogin: function () {
    wx.navigateTo({
      url: '/pages/login/index'
    });
  },

  // 显示用户操作弹窗
  showUserOptions: function () {
    this.setData({
      showUserOptions: true
    });
  },

  // 隐藏用户操作弹窗
  hideUserOptions: function () {
    this.setData({
      showUserOptions: false
    });
  },

  // 切换手机号
  switchPhone: function () {
    this.hideUserOptions();
    wx.navigateTo({
      url: '/pages/login/index'
    });
  },

  // 退出登录
  logout: function () {
    const that = this;
    const app = getApp();

    // 显示加载中
    wx.showLoading({
      title: '退出登录中...',
    });

    // 更新数据库中的登录状态
    const db = wx.cloud.database();
    db.collection('user').where({
      _openid: app.globalData.openid
    }).get({
      success: function (res) {
        if (res.data && res.data.length > 0) {
          db.collection('user').doc(res.data[0]._id).update({
            data: {
              login_status: 0, // 设置登录状态为0（未登录）
              update_time: db.serverDate()
            },
            success: function () {
              // 更新全局数据
              app.globalData.isLogin = false;
              app.globalData.userPhone = '';

              // 更新页面数据
              that.setData({
                isLogin: false,
                userPhone: '',
                showUserOptions: false
              });

              // 隐藏加载提示
              wx.hideLoading();

              // 显示退出成功提示
              wx.showToast({
                title: '退出登录成功',
                icon: 'success',
                duration: 2000
              });
            },
            fail: function (err) {
              console.error('更新用户登录状态失败', err);
              wx.hideLoading();
              wx.showToast({
                title: '退出登录失败',
                icon: 'none',
                duration: 2000
              });
            }
          });
        }
      },
      fail: function (err) {
        console.error('查询用户失败', err);
        wx.hideLoading();
        wx.showToast({
          title: '退出登录失败',
          icon: 'none',
          duration: 2000
        });
      }
    });
  },

  // 切换排行榜类型
  switchRankType(e) {
    const type = e.currentTarget.dataset.type;
    this.setData({
      currentRankType: type
    });
  },

  // 查看全部板块
  viewAllSectors() {
    wx.navigateTo({
      url: '/pages/sectors/index'
    });
  },

  // 跳转到个股详情页面
  goToStockDetail: function (e) {
    const stock = e.currentTarget.dataset.stock;
    wx.navigateTo({
      url: `/pages/stock/index?code=${stock.code}`
    });
  },

  // 切换排行榜展开状态
  toggleRankingExpanded: function (e) {
    const type = e.currentTarget.dataset.type;
    const currentExpanded = this.data.rankingExpanded[type];

    const updateData = {};
    updateData[`rankingExpanded.${type}`] = !currentExpanded;

    // 如果展开，显示完整数据；如果收起，显示前10条
    if (!currentExpanded) {
      updateData[`stockRankings.${type}`] = this.data.fullStockRankings[type];
    } else {
      updateData[`stockRankings.${type}`] = this.data.fullStockRankings[type].slice(0, 10);
    }

    this.setData(updateData);
  },

  // 加载板块数据（只加载申万行业）
  loadSectorData: function () {
    const that = this;

    wx.request({
      url: 'https://push2.eastmoney.com/api/qt/clist/get',
      data: {
        pn: 1,
        pz: 50,
        po: 1,
        np: 1,
        ut: 'bd1d9ddb04089700cf9c27f6f7426281',
        fltt: 2,
        invt: 2,
        fid: 'f3',
        fs: 'm:90+t:2+f:!50',
        fields: 'f12,f14,f3'
      },
      header: {
        'content-type': 'application/json',
        'Referer': 'https://data.eastmoney.com'
      },
      success(res) {
        that.parseIndustryData(res.data);
      },
      fail(err) {
        console.error('获取申万行业数据失败', err);
        // 保持使用默认数据，不显示错误提示
      }
    });
  },

  // 解析申万行业数据
  parseIndustryData: function (data) {
    try {
      if (data && data.data && data.data.diff && Array.isArray(data.data.diff)) {
        const industries = data.data.diff.slice(0, 8).map(item => {
          const change = item.f3;
          const changeStr = change > 0 ? `+${change.toFixed(2)}%` : `${change.toFixed(2)}%`;
          return {
            name: item.f14,
            change: changeStr
          };
        });

        this.setData({
          sectors: industries
        });
      }
    } catch (error) {
      console.error('解析申万行业数据失败', error);
      // 保持使用默认数据
    }
  },

  // 股票搜索输入事件
  onSearchInput: function (e) {
    const keyword = e.detail.value.trim();
    this.setData({
      searchKeyword: keyword
    });

    // 清除之前的定时器
    if (this.data.searchTimer) {
      clearTimeout(this.data.searchTimer);
    }

    // 如果输入为空，隐藏搜索结果
    if (!keyword) {
      this.setData({
        showSearchResults: false,
        searchResults: []
      });
      return;
    }

    // 设置防抖，500ms后执行搜索
    const timer = setTimeout(() => {
      this.searchStocks(keyword);
    }, 500);

    this.setData({
      searchTimer: timer
    });
  },

  // 搜索确认事件
  onSearchConfirm: function (e) {
    const keyword = e.detail.value.trim();
    if (keyword) {
      this.searchStocks(keyword);
    }
  },

  // 搜索框获得焦点
  onSearchFocus: function () {
    if (this.data.searchKeyword && this.data.searchResults.length > 0) {
      this.setData({
        showSearchResults: true
      });
    }
  },

  // 搜索框失去焦点
  onSearchBlur: function () {
    // 延迟隐藏搜索结果，给点击事件留时间
    setTimeout(() => {
      this.setData({
        showSearchResults: false
      });
    }, 200);
  },

  // 执行股票搜索
  searchStocks: function (keyword) {
    const that = this;

    wx.request({
      url: 'https://searchapi.eastmoney.com/api/suggest/get',
      data: {
        input: keyword,
        type: 14,
        token: 'D43BF722C8E33BDC906FB84D85E326E8',
        markettype: '',
        count: 10
      },
      header: {
        'content-type': 'application/json'
      },
      success(res) {
        console.log('股票搜索成功:', res.data);
        if (res.data && res.data.QuotationCodeTable && res.data.QuotationCodeTable.Data) {
          // 过滤只显示A股
          const results = res.data.QuotationCodeTable.Data.filter(item => {
            return item.Classify === 'AStock' && (item.SecurityTypeName === '沪A' || item.SecurityTypeName === '深A');
          });

          that.setData({
            searchResults: results,
            showSearchResults: true
          });
        } else {
          that.setData({
            searchResults: [],
            showSearchResults: true
          });
        }
      },
      fail(err) {
        console.error('股票搜索失败:', err);
        that.setData({
          searchResults: [],
          showSearchResults: false
        });
      }
    });
  },

  // 选择股票
  selectStock: function (e) {
    const stock = e.currentTarget.dataset.stock;
    console.log('选择股票:', stock);

    // 构建股票代码（添加前缀）
    let stockCode = stock.Code;
    if (stock.SecurityTypeName === '沪A') {
      stockCode = 'sh' + stock.Code;
    } else if (stock.SecurityTypeName === '深A') {
      stockCode = 'sz' + stock.Code;
    }

    // 清空搜索
    this.setData({
      searchKeyword: '',
      searchResults: [],
      showSearchResults: false
    });

    // 跳转到股票详情页
    wx.navigateTo({
      url: `/pages/stock/index?code=${stockCode}`
    });
  }
});